package com.xm.controller;

import com.xm.pojo.R;
import com.xm.pojo.contact;
import com.xm.service.contactService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/Contact")
@CrossOrigin
public class contactController {
    @Autowired
    private contactService contactService;

    /*用户1地址列表*/
    @GetMapping("/contactAll/{userId}")
    public R contactAll(@PathVariable int userId){
        List<contact> list=contactService.contactAll(userId);
        if(list.size()>0){
            return R.OK().errorMsg("地址查询成功!").data("list",list);
        }else{
            return R.ERROR().errorMsg("暂无收货地址!");
        }
    }

    /*删除地址(单个)*/
    @DeleteMapping("/deleteContact/{id}")
    public R delContact(@PathVariable int id){
        boolean flag=contactService.delContact(id);
        if(flag){
            return R.OK().errorMsg("已删除地址！");
        }else{
            return R.ERROR().errorMsg("地址删除失败!");
        }
    }

    /*删除地址(多个)*/
    @DeleteMapping("/deleteContact")
    public R delContact(@RequestBody int[] ids){
        boolean falgs=true;
        for(int i=0;i<ids.length;i++){
            boolean flag=contactService.delContact(ids[i]);
            if(!flag){
                falgs=false;
                continue;
            }
        }
        if(falgs){
            return R.OK().errorMsg("已删除地址！");
        }else{
            return R.ERROR().errorMsg("地址删除失败!");
        }
    }
    /*删除地址(全部)*/
    @DeleteMapping("/deleteContactAll/{userId}")
    public R delContactAll(@PathVariable int userId){
        boolean flag=contactService.delContactAll(userId);
        if(flag){
            return R.OK().errorMsg("已删除地址！");
        }else{
            return R.ERROR().errorMsg("地址删除失败!");
        }
    }
    /*修改地址
    * contact(
    * id 地址id,
    * userId 用户id
    * name  姓名,
    * mobile  手机号,
    * address  地址，
    * contact_flag 是否默认（1默认，0正常）)
    * */
    @PutMapping("/updateContact")
    public R updateContact(@RequestBody contact contact){
        boolean falg = false;
        if(contact.getContactFlag()==1){//判断是否需要修改成默认地址
            //修改该地址为默认地址
            List<contact> list=contactService.contactAll(contact.getUserId());//查询用户所有地址
            boolean forFlag=false;//判断是否存在默认地址
            for(int i=0;i<list.size();i++){//循环用户地址
                if(list.get(i).getContactFlag()==1){//判断用户是否设置过默认地址
                    //用户已设置默认地址
                    forFlag=true;
                    if(contact.getId()==list.get(i).getId()){//用户想要修改的id是否与默认地址id相同
                        //相同,直接修改
                        falg=contactService.updateContact(contact);
                        continue;
                    }else{
                        //不同，将默认地址取消，设置新的默认地址
                        boolean falgS=contactService.updateContectFalse(0,list.get(i).getId());
                        if(falgS){
                            falg=contactService.updateContact(contact);
                            continue;
                        }else{
                            falg=false;
                            continue;
                        }
                    }
                }
            }
            if(!forFlag){
                //不存在默认地址
                falg=contactService.updateContact(contact);
            }
        }else{
            falg=contactService.updateContact(contact);
        }
        if(falg){
            return R.OK().errorMsg("地址修改成功！");
        }else{
            return R.ERROR().errorMsg("地址修改失败!");
        }
    }

    /*单独修改状态
    * contactFlag  状态  1默认地址  0 普通地址
    * */
    @PutMapping("/updateContactFlag/{contactFlag}/{id}/{userId}")
    public R updateContactFlag(@PathVariable int contactFlag,@PathVariable int id,@PathVariable int userId){
        boolean falg=false;
        //判断是否设置为默认地址
        if(contactFlag==1){
            //设置为默认地址
            List<contact> list=contactService.contactAll(userId);//查询用户所有地址;
            boolean forFlag=false;//判断是否存在默认地址
            for(int i=0;i<list.size();i++){//循环用户地址
                if(list.get(i).getContactFlag()==1){//判断用户是否设置过默认地址
                    //用户已设置默认地址
                    forFlag=true;
                    //将默认地址取消，设置新的默认地址
                    boolean falgS=contactService.updateContectFalse(0,list.get(i).getId());
                    if(falgS){
                        falg=contactService.updateContectFalse(contactFlag,id);;
                        continue;
                    }else{
                        falg=false;
                        continue;
                    }
                }
            }
            if(!forFlag){
                //不存在默认地址
                falg=contactService.updateContectFalse(contactFlag,id);
            }
        }else{
            //设置为普通地址
            falg=contactService.updateContectFalse(contactFlag,id);
        }
        if(falg){
            return R.OK().errorMsg("地址修改成功！");
        }else{
            return R.ERROR().errorMsg("地址修改失败!");
        }
    }


    /*新增地址
    * contact(
    * userId 用户id
    * name 名称
    * mobile  电话
    * contactFlag 是否默认地址  1默认，0普通
    * address 地址
    * )
    * */
    @PostMapping("/addContact")
    public R addContect(@RequestBody contact contact){
        boolean falg = false;
        if(contact.getContactFlag()==1){//判断是否需要设置成默认地址
            //设置该地址为默认地址
            List<contact> list=contactService.contactAll(contact.getUserId());//查询用户所有地址
            boolean forFlag=false;//判断是否存在默认地址
            for(int i=0;i<list.size();i++){//循环用户地址
                if(list.get(i).getContactFlag()==1){//判断用户是否设置过默认地址
                    //用户已设置默认地址
                    forFlag=true;
                    //将默认地址取消，设置新的默认地址
                    boolean falgS=contactService.updateContectFalse(0,list.get(i).getId());
                    if(falgS){
                        falg=contactService.addContact(contact);
                        continue;
                    }else{
                        falg=false;
                        continue;
                    }
                }
            }
            if(!forFlag){
                //不存在默认地址
                falg=contactService.addContact(contact);
            }
        }else{
            falg=contactService.addContact(contact);
        }
        if(falg){
            return R.OK().errorMsg("地址添加成功！");
        }else{
            return R.ERROR().errorMsg("地址添加失败!");
        }
    }

    /**
     * 通过id获取地址信息
     * @param id
     * @return
     */
    @GetMapping("/findById/{id}")
    public R findById(@PathVariable int id){
        contact contact = contactService.findById(id);
        if(contact != null){
            return R.OK().data("contact",contact);
        } else {
            return R.ERROR().errorMsg("获取地址信息失败");
        }
    }
    /**
     * 查询某个用户除某个联系人之外的地址信息
     * @param userId
     * @param
     * @return
     */
    @GetMapping("/findAddressInfo/{userId}/{name}/{mobile}/{address}")
    public R findAddressInfo(@PathVariable int userId,@PathVariable String name,
                             @PathVariable String mobile,@PathVariable String address){
        List<contact> list = contactService.findAddressInfo(userId,name,mobile,address);
        if(list.size() > 0){
            return R.OK().data("list",list);
        } else {
            return R.ERROR().errorMsg("查询失败");
        }
    }
}
